/*
 * HttpFileBody.h
 *
 */

#ifndef HTTPFILEBODY_H_
#define HTTPFILEBODY_H_

#include "HttpBody.h"
#include <fstream>

class HttpFileBody: public HttpBody {
	private:
		std::fstream file;
		size_t size;
	public:
		/** Crea una instancia asociada al archivo.
		 * @param filename Path del archivo a asociar.
		 * @throw MesssageException En caso que no pueda abrirse el archivo.
		 */
		HttpFileBody(const std::string& filename);

		virtual ~HttpFileBody();

		/** Devuelve el header correspondiente para el envio de bodys en http.
		 * @return Puntero a un HttpHeader en el heap.
		 */
		HttpHeader* getContentLength() const;

		/**
		 * Devuelve el tamaño del archivo asociado.
		 */
		size_t getSize() const;

		/**
		 * Devuelve una referencia al body stream contenido.
		 */
		std::istream& getStream();
};

#endif /* HTTPFILEBODY_H_ */
